import java.io.*;
import java.net.*;
import java.util.*;

public class servidor_dinamico {
  private int port_con;
  private int maxPlazas;

  // constructor
  servidor_dinamico(int port_in, int nin) {
    port_con = port_in;
    maxPlazas = nin;
  } // servidor_dinamico

  public void run() {
    try {

      // OJO A MODIFICAR
      mon_lect_escr_sx M = new mon_lect_escr_sx();
      base_datos BD = new base_datos(maxPlazas); //modificado: numero de plazas

      // instancia un socket para aceptar la conexion
      ServerSocket SocketConexion = new ServerSocket(port_con);
      System.out.println("Servidor Principal escuchando el puerto " + port_con);
      System.out.println("Numero maximo de plazas: " + maxPlazas);

      while (true) {
        // espera una peticion de conexion, instante en el cual
        // se crea un socket de datos
        SocketBytes SocketDatos = new SocketBytes(SocketConexion.accept());
        int nom_cliente = ((Integer) SocketDatos.recibeMensaje()).intValue();
        System.out.println("Conectado Cliente " + nom_cliente);
        
        pru_servidor_mon_lect_escr_sx P = new pru_servidor_mon_lect_escr_sx(M, BD, SocketDatos);
        P.start();
      } // while ...
    } catch (Exception e) // Imprimir cualquier excepcion
    { System.err.println(e); }
  } // run

  public static void main(String args[]) throws NumberFormatException {
    if (args.length < 1) {
      System.out.println("Arg1: puerto para conexion. Arg2 opcional: numero de plazas");
      System.exit(1);
    } // if ...  
      
    int port_con = Integer.parseInt(args[0]);

    int maxPlazas;
    if (args.length == 2)
      maxPlazas = Integer.parseInt(args[1]);
    else
      maxPlazas = 10; //por defecto

    servidor_dinamico sd = new servidor_dinamico(port_con, maxPlazas);
    sd.run();
  } // main
} // servidor_dinamico

